
#include <iostream>
using namespace std;
// 饿汉模式 以空间换时间
//静态变量  程序运行时就会生成该单例对象
 class Singleton
 {
 private:
     static Singleton _eton;//声明

private:
    Singleton() : _data(99) {
        cout << "这是一个单例模式" << endl;
    }
    ~Singleton() {}

private:
    int _data;

public:
    Singleton(const Singleton &) = delete;
    Singleton &operator=(const Singleton &) = delete;
    int getdata() { return _data; }
    static Singleton &getInstance()
    {
        return _eton;
    }
};
Singleton Singleton::_eton; //初始化

// 懒汉模式 --懒加载 延迟加载的思想 --一个对象在用的时候再初始化

// class Singleton
// {
// private:
//     Singleton() : _data(99)
//     {
//         cout << "这是一个单例模式" << endl;
//     }
//     ~Singleton() {}

// private:
//     int _data;

// public:
//     Singleton(const Singleton &) = delete;
//     Singleton &operator=(const Singleton &) = delete;
//     int getData()
//     {
//         return _data;
//     }
//     static Singleton &getInstance()
//     {
//         // 特殊的单例模式，再c++11后满足静态变量线程安全后能满足唯一的构造和析构
//         static Singleton _eton;
//         return _eton;
//     }
// };

int main()
{
    //Singleton::getInstance();
    //std::cout << Singleton::getInstance().getData() << std::endl;
    return 0;
}